/** 封装了常用的一些方法，包含了小程序获取用户信息，获取code，以及登录方法
 **/
const custom = {
	/**
	 * 消息对话框 
	 * @param {String} title - 对话框的标题
	 * @param {String} centent - 对话框的内容
	 **/
	modal: (title, content,) => {
		return new Promise(r=>{
			uni.showModal({
				title,
				content,
				success: (res) => {
					r(res.confirm)
				}
			})
		})
	},
	/** 
	 * 消息提示框 
	 * @param {String} title - 提示框的内容
	 * @param {String} icon - 图标
	 * @param {Number} duration - 显示的时间长度
	 **/
	toast: (title, icon='none', duration = 1500) => {
		uni.showToast({
			title,
			icon,
			duration
		})
	},
	/** 
	 * 等待提示框
	 * @param {Boolean} bool - 显示或隐藏，默认true
	 * @param {String} title - 提示框的内容
	 * @param {Boolean} mask - 是否防止穿透，默认true
	 **/
	loading: (bool = true, title = '', mask = true) => {
		if (bool) {
			uni.showLoading({
				title,
				mask,
			})
		} else uni.hideLoading()
	},
	/** 
	 * 非tab页面跳转
	 * @param {String} url - 跳转页面路径
	 * @param {Boolean} bool - 检测是否登录，默认false
	 * @param {Number} duration - 跳转等待时间
	 **/
	navigateTo: (url, bool = false, duration = 0) => {
		if (bool) {
			if (!uni.getStorageSync('token')) {
				// uni.navigateTo({
				// 	url: '/pages/uers/login'
				// })
				uni.showToast({
					title:'请登录后操作',
					icon:'none'
				})
				return
			}
		}
		setTimeout(() => {
			uni.navigateTo({
				url: /^\//.test(url) ? url : `/${url}`
			})
		}, duration)
	},
	/** 
	 * 主页面跳转
	 * @param {String} url - 跳转tab页面路径
	 * @param {Boolean} bool - 检测是否登录，默认false
	 * @param {Number} duration - 跳转等待时间
	 **/
	switchTab: (url, bool = false, duration = 0) => {
		if (bool) {
			if (!uni.getStorageSync('token')) {
				uni.navigateTo({
					url: '/pages/login/login'
				})
				return
			}
		}
		setTimeout(() => {
			uni.switchTab({
				url: /^\//.test(url) ? url : `/${url}`
			})
		}, duration)
	},
	/** 
	 * 关闭当前页面挑战
	 * @param {String} url - 跳转tab页面路径
	 * @param {Boolean} bool - 检测是否登录，默认false
	 * @param {Number} duration - 跳转等待时间
	 **/
	redirectTo: (url, bool = false, duration = 0) => {
		if (bool) {
			if (!uni.getStorageSync('token')) {
				// uni.navigateTo({
				// 	url: '/pages/ures/ures'
				// })
				uni.showToast({
					title:'请登录后操作',
					icon:'none'
				})
				return
			}
		}
		setTimeout(() => {
			uni.redirectTo({
				url: /^\//.test(url) ? url : `/${url}`
			})
		}, duration)
	},
	/**
	 * 关闭所有页面挑战
	 * @param {String} url - 跳转tab页面路径
	 * @param {Boolean} bool - 检测是否登录，默认false
	 * @param {Number} duration - 跳转等待时间
	 **/
	reLaunch: (url, bool = false, duration = 0) => {
		if (bool) {
			if (!uni.getStorageSync('token')) {
				uni.navigateTo({
					url: '/pages/login/login'
				})
				return
			}
		}
		setTimeout(() => {
			uni.redirectTo({
				url: /^\//.test(url) ? url : `/${url}`
			})
		}, duration)
	},
	/** 
	 * 页面返回
	 * @param {Number} page - 返回页面层数
	 * @param {Number} duration - 跳转等待时间
	 **/
	navigateBack: (page = 1, duration = 0) => {
		setTimeout(() => {
			uni.navigateBack({
				delta: page
			})
		}, duration)
	},
	/** 
	 * 获取前一页面实例vm
	 * @return {Object} $vm - 上一页this实例
	 **/
	beforePage: () => {
		let Pages = getCurrentPages()
		return Pages[Pages.length - 2].$vm
	},
	/** 
	 * 预览图片
	 * @param {String,Array} arr - 图片资源
	 * @param {Number} current - 预览图片索引
	 **/
	previewImage: (arr = [], current = 0) => {
		let urls = []
		if (Object.prototype.toString.call(arr) == '[object Array]') urls = arr
		else urls = arr.split(',')
		uni.previewImage({
			urls,
			current
		})
	},
	/** 拨打电话
	 * @param {Number} phoneNumber - 电话号码
	 **/
	makePhoneCall: phoneNumber => {
		uni.makePhoneCall({
			phoneNumber
		})
	},
	/** 获取状态栏高度
	 * @return {Object} statusHeight - 状态栏高度相关信息
	 **/
	getStatusHeight: () => {
		let statusHeight = {}
		let custom = wx.getMenuButtonBoundingClientRect();
		statusHeight.jiaotop = custom.top;
		statusHeight.jiaoheight = custom.bottom - custom.top;
		return statusHeight
	},
	/** 获取底部安全区域
	 * @return {Object} area - 安全区域相关信息
	 **/
	getbottomArea: () => {
		let area = {};
		uni.getSystemInfo({
			success: res => {
				if (res.system.split(' ')[0].toLowerCase() == 'ios') area = res.safeArea.bottom -
					res
					.safeArea.height
				else area = ''
			}
		})
		return area
	},
	/** 图片处理-选择图片
	 * @param {Number} count - 选择数量
	 * @param {String} sourceType - 选择方式，album 相册,camera 相机
	 * @param {String} sizeType - 图片质量，original 原图,compressed 压缩
	 **/
	chooseImage: (count = 1, sourceType = ['album', 'camera'], sizeType = ['original', 'compressed']) => {
		return new Promise((resolve, reject) => {
			sourceType = Object.prototype.toString.call(sourceType) === '[object String]' ? [
				sourceType
			] : sourceType
			sizeType = Object.prototype.toString.call(sizeType) === '[object String]' ? [
				sizeType
			] : sizeType
			uni.chooseImage({
				count,
				sourceType,
				sizeType,
				success: res => {
					resolve(res.tempFilePaths);
				}
			})
		})
	},
	/** 图片处理-上传图片，暂支支持单张上传
	 * @param {String} url - 上传服务器接口
	 * @param {String,Array} tempFilePaths - 图片资源
	 * @param {String} name - 服务器接收资源对应字段
	 **/
	uploadImage: (url, tempFilePaths = [], name = 'file') => {
		return new Promise((r, j) => {
			uni.showLoading({
				title: '上传中...'
			})
			tempFilePaths = Object.prototype.toString.call(tempFilePaths) === '[object String]' ? [
				tempFilePaths
			] : tempFilePaths
			uni.uploadFile({
				url, //仅为示例，非真实的接口地址
				filePath: tempFilePaths[0],
				name,
				formData: {
					token: uni.getStorageSync('token')
				},
				success: uploadFileRes => {
					r(JSON.parse(uploadFileRes.data).data)
					uni.hideLoading()
				}
			});
		})
	},
	/**
	 *  路径截取参数
	 * @param {String} str - 原字符串
	 * @param {String} name - 目标字符串
	 * @return {String} sValue - 返回查询结果
	 **/
	reUrl: (str, name) => {
		str = str.slice(str.indexOf('?'), str.length);
		let sValue = str.match(new RegExp("[\?\&]" + name + "=([^\&]*)(\&?)", "i"));
		return sValue ? sValue[1] : sValue;
	},
	/** 
	 * 获取用户信息
	 * @return {Boolean} 返回用户信息
	 **/
	getUserProfile: () => {
		return new Promise((resolve, reject) => {
			wx.getUserProfile({
				desc: '用于注册或登录',
				success: res => {
					resolve(res)
				},
				fail: error => {
					reject(error)
				}
			})
		})
	},
	/** 
	 * 获取code
	 * @return {Boolean} 返回code
	 **/
	getCode: () => {
		return new Promise((resolve, reject) => {
			uni.login({
				provider: 'weixin',
				success: res => {
					resolve(res)
				},
				fail: error => {
					reject(error)
				}
			})
		})
	},
	/** 
	 * 退出登录提示
	 **/
	logout: () => {
		return new Promise((resolve, reject) => {
			uni.showModal({
				title: '退出提示',
				content: '是否确认退出登录?',
				success: (res) => {
					resolve(res.confirm)
				}
			})
		})
	},
	/** 
	 * 域名检测并补全域名
	 * @param {String} load - 路径  
	 * @param {String} url - 域名  
	 **/
	hasUrlHeader: (load, url) => {
		return /http/.test(load) ? load : /^\//.test(load) ? url + load : url + `/${load}`
	},
	/** 
	 * 复制剪切板
	 * @param {String} data - 复制内容  
	 **/
	setClipboardData: data => {
		uni.setClipboardData({
			data
		})
	},
	/** 获取剪切板
	 * @return {String} data - 剪切板内容
	 **/
	getClipboardData: () => {
		uni.getClipboardData({
			success: res => {
				return res.data
			}
		})
	},
	/**
	 * 获取当前经纬度
	 **/
	getLocation: () => {
		return new Promise((reject, resolve) => {
			uni.getLocation({
				success: res => reject(res),
				fail: error => resolve(error)
			})
		})
	},
	/**打开内置地图选择地址
	 *  @param {String} latitude - 纬度
	 *  @param {String} longitude - 经度
	 **/
	chooseLocation: (latitude = '', longitude = '') => {
		return new Promise((reject, resolve) => {
			if (latitude && longitude) {
				uni.chooseLocation({
					latitude,
					longitude,
					success: (res) => reject(res),
					fail: error => resolve(error)
				})
			} else {
				uni.chooseLocation({
					success: (res) => reject(res),
					fail: error => resolve(error)
				})
			}
		})
	},
	/**打开地图导航
	 *  @param {String} latitude - 纬度
	 *  @param {String} longitude - 经度
	 **/
	openLocation: (latitude, longitude) => {
		console.log(Number(latitude),Number(longitude));
		uni.openLocation({
			latitude: Number(latitude),
			longitude: Number(longitude)
		})
	},
	/**
	 * 调起微信支付
	 *  @param {Object} wxForm - 支付表单
	 **/
	wxPay: wxForm => {
		return new Promise((r, j) => {
			uni.showLoading({
				title:'支付中'
			})
			uni.requestPayment({
				...wxForm,
				signType: 'MD5',
				success: res => {
					r(true)
					uni.hideLoading()
				},
				fail: error => {
					r(false)
					console.log(error)
				}
			})
		})
	},
	/**
	 * 调起抖音支付
	 *  @param {Object} wxForm - 支付表单
	 **/
	dyPay: dyForm => {
		return new Promise((r, j) => {
			uni.showLoading({
				title:'支付中'
			})
			tt.pay({
				...dyForm,
				service: 5,
				success: res => {
					r(true)
					uni.hideLoading()
				},
				fail: error => {
					r(false)
					console.log(error)
				}
			})
		})
	},
	/**调起扫码
	 * @param {Boolean} onlyFromCamera 是否只能相机扫码，默认true
	 * @param {String} scanType 扫码类型 1.barCode一维码 2.qrCode二维码(默认) 3.datamatrix (Data Matrix 码) 4.pdf417 PDF417 条码
	 **/
	scanCode: (onlyFromCamera = true, scanType = 'qrCode') => {
		return new Promise((r, j) => {
			uni.scanCode({
				onlyFromCamera: true,
				scanType: [scanType],
				success: res => r(res),
				fail: error => j(error)
			})
		})
	},
	/**
	 *  tabBar 某一项的右上角添加文本
	 * @param {Number} index 索引值
	 * @param {String} text 文本
	 **/
	setTabBarBadge: (index, text) => {
		uni.setTabBarBadge({
			index,
			text: text.toString()
		})
	},
	/**
	 *  移除 tabBar 某一项右上角的文本
	 * @param {Number} index 索引值
	 **/
	removeTabBarBadge(index) {
		uni.removeTabBarBadge({
			index
		})
	},
	/**
	 *  显示 tabBar 某一项的右上角的红点
	 * @param {Number} index 索引值
	 **/
	showTabBarRedDot(index) {
		uni.showTabBarRedDot({
			index
		})
	},
	/**
	 *  隐藏 tabBar 某一项的右上角的红点
	 * @param {Number} index 索引值
	 **/
	hideTabBarRedDot(index) {
		uni.hideTabBarRedDot({
			index
		})
	},
	
}

export default custom
